//
// Created by Jisam on 13/09/2024 7:00 PM.
// Solution of  Cidoai的幂次序列
//#pragma GCC optimize(3)
#include <bits/stdc++.h>

using namespace std;
#define coutn(x) cout << (x) << "\n"
#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
typedef long long i64;
typedef unsigned u32;
typedef unsigned long long u64;
typedef __int128 i128;
int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1,};
int dy[] = {0, 0, -1, 1, 1, -1, -1, 1,};
int n,k;
const int INF = 0x3f3f3f3f,MOD = 1e9+7;
template<typename T> T ksm(T b, T e, T m) {
    T r = 1;
    while (e) {
        if (e & 1) r = (r * b) % m;
        b = (b * b) % m;
        e >>= 1;
    }
    return r;
}
void solution() {
    cin >> n >> k;
    i64 ans = 0;
    for(int i = 1; i <= n ; i ++){
        ans += ksm(i,i + 1,MOD);
    }
}

int main() {
    code_by_jisam;
    i64 T = 1;
//    cin >> T;
    while (T--) {
        solution();
    }
    return 0;
}